"use strict";

var exec = require("child_process").exec;

module.exports = function (grunt) {
    grunt.registerTask("version", "Commit a new version", function (version) {
        if (!/\d\.\d+\.\d+(?:-pre)?/.test(version)) {
            grunt.fatal("Version must follow semver release format: " + version);
            return;
        }

        var done = this.async(),
            files = grunt.config("version.files"),
            rversion = /("version":\s*")[^"]+/;

        // Update version in specified files
        files.forEach(function (filename) {
            var text = grunt.file.read(filename);
            text = text.replace(rversion, "$1" + version);
            grunt.file.write(filename, text);
        });

        // Add files to git index
        exec("git add -A", function (err) {
            if (err) {
                grunt.fatal(err);
                return;
            }
            // Commit next pre version
            grunt.config("pkg.version", version);
            grunt.task.run(["build", "uglify", "dist", "commit:'Update version to " + version + "'"]);
            done();
        });
    });
};
